package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtils {
    // 1. 加盐 并 生成密码

    /**
     * @param password
     * @return 加盐后的密码
     */
    public static String encrypt(String password) {
        // 产生盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 生成加盐之后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 最终密码（保存到数据库中）
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;

    }


    /**
     * // 2. 生成加盐的密码（1的重载）
     *
     * @param password
     * @param salt
     * @return 最终密码
     */
    public static String encrypt(String password, String salt) {
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;

    }


    /**
     * // 3. 验证密码
     *
     * @param inputPassword 用户输入的明文密码
     * @param finalPassword 数据库保存的最终密码
     * @return
     */
    public static Boolean check(String inputPassword, String finalPassword) {

        if (StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword)
                && finalPassword.length() == 65) {
            // 1. 得到盐值
            String salt = finalPassword.substring(0, 32);
            System.out.println("得到的盐值：" + salt);
            // 2.进行加密
            String confirmPassword = PasswordUtils.encrypt(inputPassword, salt);
            System.out.println("加密后：" + confirmPassword);
            System.out.println("最终：" + finalPassword);
            return confirmPassword.equals(finalPassword);
        }
        return false;
    }


}
